/******************************************************************************* * Signavio Core Components * Copyright (C) 2012 Signavio GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package de.hpi.bpmn2_0.factory; import org.oryxeditor.server.diagram.Bounds; import org.oryxeditor.server.diagram.generic.GenericShape; import de.hpi.bpmn2_0.exceptions.BpmnConverterException; import de.hpi.bpmn2_0.model.BaseElement; import de.hpi.bpmn2_0.model.bpmndi.BPMNShape; import de.hpi.bpmn2_0.model.extension.ExtensionElements; import de.hpi.bpmn2_0.model.extension.signavio.SignavioMetaData; import de.hpi.bpmn2_0.util.DiagramHelper; import sushi.bpmn2_0.model.extension.monitoring.Transition; import sushi.bpmn2_0.model.extension.monitoring.TransitionType; /** * Abstract factory to handle all types {@link BPMNShape} objects. * * @author Sven Wagner-Boysen * */ public abstract class AbstractShapeFactory extends AbstractBpmnFactory { /* (non-Javadoc) * @see de.hpi.bpmn2_0.factory.common.AbstractBpmnFactory#createBpmnElement(org.oryxeditor.server.diagram.Shape, de.hpi.bpmn2_0.factory.BPMNElement) */ // @Override public BPMNElement createBpmnElement(GenericShape shape, BPMNElement parent) throws BpmnConverterException { BPMNShape diaElement = this.createDiagramElement(shape); BaseElement processElement = this.createProcessElement(shape); diaElement.setBpmnElement(processElement); super.setLabelPositionInfo(shape, processElement); setBgColor(shape, processElement); setMonitoringPoints(shape, processElement); BPMNElement bpmnElement = new BPMNElement(diaElement, processElement, shape.getResourceId()); // handle external extension elements like from Activiti try { super.reinsertExternalExtensionElements(shape, bpmnElement); } catch (Exception e) { } return bpmnElement; } /* (non-Javadoc) * @see de.hpi.bpmn2_0.factory.common.AbstractBpmnFactory#createDiagramElement(org.oryxeditor.server.diagram.Shape) */ // @Override protected BPMNShape createDiagramElement(GenericShape shape) { BPMNShape bpmnShape = new BPMNShape(); super.setVisualAttributes(bpmnShape, shape); /* Bounds */ bpmnShape.setBounds(createBounds(shape)); return bpmnShape; } /* Helper methods */ /** * Generates the BPMN Bounds out of a Shape. */ private de.hpi.bpmn2_0.model.bpmndi.dc.Bounds createBounds(GenericShape shape) { Bounds absBounds = shape.getAbsoluteBounds(); de.hpi.bpmn2_0.model.bpmndi.dc.Bounds bpmnBounds = new de.hpi.bpmn2_0.model.bpmndi.dc.Bounds(); bpmnBounds.setX(absBounds.getUpperLeft().getX()); bpmnBounds.setY(absBounds.getUpperLeft().getY()); bpmnBounds.setHeight(shape.getHeight()); bpmnBounds.setWidth(shape.getWidth()); return bpmnBounds; } /** * Sets the bgcolor property as a {@link SignavioMetaData} extension * element. * * @param node * @param element */ private void setBgColor(GenericShape node, BaseElement element) { String bgColor = node.getProperty("bgcolor"); if(bgColor != null) { ExtensionElements extElements = element.getOrCreateExtensionElements(); extElements.add(new SignavioMetaData("bgcolor", bgColor)); } } /** * Sets the monitoring points properties as a {@link Sushi} extension * elements. * * @param node * @param element */ private void setMonitoringPoints(GenericShape node, BaseElement element) { String enableRegExpr = node.getProperty("enable"); String beginRegExpr = node.getProperty("begin"); String terminateRegExpr = node.getProperty("terminate"); String skipRegExpr = node.getProperty("skip"); ExtensionElements extElements = element.getOrCreateExtensionElements(); if (enableRegExpr != null) if (!enableRegExpr.trim().isEmpty()) { extElements.add(new Transition(TransitionType.enable, enableRegExpr)); } if (beginRegExpr != null) if (!beginRegExpr.trim().isEmpty()) { extElements.add(new Transition(TransitionType.begin, beginRegExpr)); } if(terminateRegExpr != null) if(!terminateRegExpr.trim().isEmpty()) { extElements.add(new Transition(TransitionType.terminate, terminateRegExpr)); } if(skipRegExpr != null) if(!skipRegExpr.trim().isEmpty()) { extElements.add(new Transition(TransitionType.skip, skipRegExpr)); } } }